Banded Dotterel Moult Study

Exploration of dataset

Authors
Affiliations

Department of Ornithology, Max Planck Institute for Biological Intelligence, Seewiesen, Germany

Bashar Jarayseh

Department of Ornithology, Max Planck Institute for Biological Intelligence, Seewiesen, Germany

Ailsa Howard

South Bay Banded Dotterel Project, Kaikoura, New Zealand

Ted Howard

South Bay Banded Dotterel Project, Kaikoura, New Zealand

Tony Habraken

Port Waikato Banded Dotterel Project, Port Waikato, New Zealand

Emma Williams

Department of Conservation, Christchurch, New Zealand

Colin O`Donnell

Department of Conservation, Christchurch, New Zealand

Bart Kempenaers

Department of Ornithology, Max Planck Institute for Biological Intelligence, Seewiesen, Germany

Published

January 27, 2025

Main conclusions since last meeting in Nov, 2024

Sex difference in maximum rufous band score (strong effect)

Males have a more full and immaculate rufous breast band than females

No age effect on maximum rufous band score

Migratory-status difference in maximum rufous band score (weak, albiet significant effect)

Residents of both sexes have slightly more full and immaculate rufous breast bands than migrants

No sex-specific timing of the pre-basic moult

No migratory-status-specific timing of the pre-basic moult

Age-specific timing of pre-basic moult (strong effect)

younger birds initiate their pre-basic moult earlier than older birds

No effect of maximum rufous band score on prolonged breeding

No effect of maximum rufous band score on early breeding

No effect of prolonged breeding on maximum rufous band score

Positive relationship between the date when an individual was last seen with its maximum breeding plumage and the date when it was last observed breeding

No age effect on prolonged breeding

No age effect on early breeding

Exploration of moult data extracted from photos

Note: data last modified 7-Nov-2024

This dataset contains the scored moult data for all usable photos from the 2021-2022, 2022-2023, and 2023-2024 breeding seasons at Kaikoura

check max and min dates for each season

# A tibble: 3 × 4
  season n_obs min_date   max_date  
   <dbl> <int> <date>     <date>    
1   2021   710 2021-08-02 2022-04-22
2   2022   614 2022-07-30 2023-04-14
3   2023   647 2023-07-01 2024-04-23

summarize the number of individuals in the dataset

[1] 94

assess how many individuals have more than a single season of data

[1] 63

summarise the number of usable photos for each individual across the three seasons

the final dataset

Code
dat %>% 
  datatable(class = 'cell-border stripe', rownames = FALSE, filter = 'top')

Plot the sampling distribution of Ailsa’s photos across the seasons

The “score” value is based on a scale from 1 to 7 describing the immaculate-ness and full-ness of the rufous breast band seen in the photos (Kok, Hogan, and Piersma (2020))

NOTE FOR BASHAR (26-01-2025):

would be great to add a figure here showing example photos of an individual male and female over several phases of the moult. For example, two-columns with male on left, female on right, and 5 rows of images starting with their fullest and most immaculate state and ending with their basic plumage. Would be useful to show the scores you gave for these individuals in the figure. Based on the data, it seems like Male "RRGO" and Female "RWBB" would be a good candidates given that they recieved a wide range of scores

Code
dat %>% 
  select(sex, rings_comb, season, score, date) %>% 
  group_by(sex, rings_comb, season) %>% 
  summarise(n_unique_scores = n_distinct(score)) %>% 
  arrange(desc(n_unique_scores))
# A tibble: 197 × 4
# Groups:   sex, rings_comb [95]
   sex   rings_comb season n_unique_scores
   <chr> <chr>       <dbl>           <int>
 1 M     RRGO         2022               7
 2 F     RWBB         2021               6
 3 M     RGGY         2023               6
 4 M     RRGO         2021               6
 5 M     RRGO         2023               6
 6 M     RRWW         2021               6
 7 F     RGGL         2021               5
 8 F     RROB         2022               5
 9 F     RWRR         2023               5
10 M     RROB         2022               5
# ℹ 187 more rows

2021-2022 season data

2022-2023 season data

2023-2024 season data

Sources of individual variation in the maximum score of the rufous band

Sex-specific differences in breeding plumage

data wrangle for sex model - note that the max plumage score recorded during the core breeding months (Aug-Dec) is extracted for each individual for each year (“max_breeding_score”).

Code
# extract the core breeding months (i.e., when presumably all birds are at their maximum breeding plumage), and determine the maximum score for each individual.
ind_breeding_scores <-
  dat %>% 
  mutate(score = as.numeric(score)) %>% 
  mutate(breeding_season = ifelse(month(date) %in% c(8, 9, 10, 11, 12), 1, 0)) %>% 
  filter(breeding_season == 1) %>% 
  group_by(season, rings_comb, sex) %>% #filter(rings_comb == "RRBY") %>% select(score, date)
  summarise(max_breeding_score = max(score),
            date_of_max_score = date[which.max(score)],
            mode_breeding_score = get_mode(score)) %>% 
  ungroup() %>% 
  mutate(max_breeding_score_mean = round((max_breeding_score + mode_breeding_score)/2)) %>% 
  mutate(date_J_of_max_score = as.numeric(format(date_of_max_score + 181, "%j")))

Assess sample sizes of each sex

# A tibble: 2 × 2
  sex   `n_distinct(rings_comb)`
  <chr>                    <int>
1 F                           49
2 M                           35

mixed model with individual and season as random intercepts and sex as fixed effect

Code
# linear mixed model for the difference in max score between sexes
mod_max_score <- lmer(max_breeding_score ~ sex +
                        (1 | rings_comb) + (1 | season), 
                      data = ind_breeding_scores)

Males tend to have a more full and immaculate rufous bands than females, however there is substantial overlap in their distributions.

sex-specific breeding plumage distributions

effect-size table for sex-specific breeding plumage model

Banded Dotterel rufous band score Mean estimate 95% confidence interval
Fixed effects 𝛽 (standardized)
Male (Sex) 1.01 [0.73, 1.27]
Partitioned 𝑹²
Total Marginal 𝑹² 0.29 [0.17, 0.41]
Sex 0.29 [0.17, 0.41]
Total Conditional 𝑹² 0.51 [0.33, 0.66]
Random effects 𝜎²
Individual 0.17 [0.04, 0.31]
Year 0.03 [0, 0.13]
Residual 0.42 [0.31, 0.57]
Adjusted repeatability 𝑟
Individual 0.27 [0.07, 0.46]
Year 0.04 [0, 0.17]
Residual 0.69 [0.49, 0.9]
Sample sizes 𝑛
Years 3
Individuals 83
Observations 164

sex-specific breeding plumage model predictions

Age- and sex-specific variation in breeding plumage (of known-aged birds)

data wrangle for sex-age model. Standardize max_breeding_score according to sex to make males and females to make them comparable across ages (i.e., does max_breeding_score change across age while accounting for underlying sex differences?)

Code
# extract the core breeding months (i.e., when presumably all birds are at their maximum breeding plumage), and determine the maximum score for each individual.
ind_breeding_scores_age <- 
  dat %>% 
  mutate(score = as.numeric(score)) %>% 
  mutate(breeding_season = ifelse(month(date) %in% c(8, 9, 10, 11, 12), 1, 0)) %>% 
  filter(breeding_season == 1) %>% 
  group_by(season, rings_comb, sex, age) %>% 
  summarise(max_breeding_score = max(score)) %>% 
  ungroup() %>%
  group_by(sex) %>% 
  mutate(std_max_breeding_score = (max_breeding_score - mean(max_breeding_score, na.rm = TRUE)) / sd(max_breeding_score, na.rm = TRUE)) %>%
  filter(!is.na(age))

Assess sample sizes of each sex for individuals with known age

Code
ind_breeding_scores_age %>% 
  group_by(sex) %>% 
  summarise(n_distinct(rings_comb))
# A tibble: 2 × 2
  sex   `n_distinct(rings_comb)`
  <chr>                    <int>
1 F                           14
2 M                           10

mixed model of standardized max breeding score (by sex) with individual as random intercept and age as fixed effect (Note: we tried to include season as an additional random intercept, but the low sample size of repeated measures across seasons caused convergence issues of the model)

Code
# linear mixed model for the difference in max score between sexes across age
mod_max_score_age <- 
  lmer(std_max_breeding_score ~ age +
         (1 | rings_comb), 
       data = ind_breeding_scores_age)

effect-size table for sex- and age-specific variation in breeding plumage

no effect of age on the maximum extent of an individual’s rufous band score while controlling for underlying sex-specific variation

Banded Dotterel rufous band score Mean estimate 95% confidence interval
Fixed effects 𝛽 (standardized)
Age 0.09 [-0.24, 0.37]
Partitioned 𝑹²
Total Marginal 𝑹² 0.01 [0, 0.13]
Age 0.01 [0, 0.13]
Total Conditional 𝑹² 0.38 [0.01, 0.72]
Random effects 𝜎²
Individual 0.27 [0, 0.66]
Residual 0.45 [0.2, 0.75]
Adjusted repeatability 𝑟
Individual 0.37 [0, 0.72]
Residual 0.63 [0.28, 1]
Sample sizes 𝑛
Years 3
Individuals 24
Observations 42

age-specific breeding plumage model predictions

Migratory status- and sex-specific variation in breeding plumage (of known-status birds)

data wrangle for sex-migratory status model

Code
# extract the core breeding months (i.e., when presumably all birds are at their maximum breeding plumage), and determine the maximum score for each individual.
ind_breeding_scores_status <- 
  dat %>% 
  mutate(score = as.numeric(score)) %>% 
  mutate(breeding_season = ifelse(month(date) %in% c(8, 9, 10, 11, 12), 1, 0)) %>% 
  filter(breeding_season == 1) %>% 
  group_by(season, rings_comb, sex, age, migratory_status) %>% 
  summarise(max_breeding_score = max(score)) %>% 
  ungroup() %>%
  group_by(sex) %>% 
  mutate(std_max_breeding_score = (max_breeding_score - mean(max_breeding_score, na.rm = TRUE)) / sd(max_breeding_score, na.rm = TRUE)) %>% 
  filter(migratory_status %in% c("M", "R"))

Assess sample sizes of each sex and migratory status (for birds with known status)

Code
# Assess sample sizes of each sex and season 
# (13 females (2 migrant, 11 resident), 8 males (3 migrant, 5 resident))
ind_breeding_scores_status %>% 
  group_by(sex, migratory_status) %>% 
  summarise(n_distinct(rings_comb))
# A tibble: 4 × 3
# Groups:   sex [2]
  sex   migratory_status `n_distinct(rings_comb)`
  <chr> <chr>                               <int>
1 F     M                                       2
2 F     R                                      11
3 M     M                                       3
4 M     R                                       5

mixed model of standardized max breeding score (by sex) with individual as random intercept and migratory status as fixed effect (Note: we tried to include season as an additional random intercept, but the low sample size of repeated measures across seasons caused convergence issues of the model)

Code
# linear mixed model for the difference in max score between sexes
mod_max_score_status <- 
  lmer(std_max_breeding_score ~ migratory_status + 
         (1 | rings_comb), 
       data = ind_breeding_scores_status)

effect-size table and plot for sex- and migratory-status breeding plumage

no effect of migratory status on an individual’s rufous band score while controlling for underlying sex-specific variation

Banded Dotterel rufous band score Mean estimate 95% confidence interval
Fixed effects 𝛽 (standardized)
Resident (Migratory Status) 0.55 [0.04, 1.16]
Partitioned 𝑹²
Total Marginal 𝑹² 0.10 [0, 0.34]
Migratory Status 0.10 [0, 0.34]
Total Conditional 𝑹² 0.23 [0.01, 0.61]
Random effects 𝜎²
Individual 0.08 [0, 0.38]
Residual 0.51 [0.23, 0.76]
Adjusted repeatability 𝑟
Individual 0.16 [0, 0.54]
Residual 0.84 [0.46, 1]
Sample sizes 𝑛
Years 3
Individuals 21
Observations 42

migratory status-specific breeding plumage model predictions

Sources of individual variation in the timing of pre-basic moult

Within-individual moult dynamics across sexes

wrangle data by calculating the individual proportional moult scores by comparing each score to a given individual’s max (determined in previous chunk). Piece apart sex-specific variation in the timing of pre-basic moult

Assess sample sizes of each sex

# A tibble: 2 × 2
  sex   `n_distinct(rings_comb)`
  <chr>                    <int>
1 F                           49
2 M                           32

mixed effects binomial model assessing sex-differences in the timing of pre-basic moult while accounting for bird- and year-specific random variation in the timing of pre-basic moult (i.e., random slope model of date for individual and year).

Code
mod_moult_sex_bird_RIS <- 
  lme4::glmer(prop_molt_score_max ~ 
                date_J + sex + 
         (date_J | ring_season),
       data = ind_prop_molt_scores, 
       family = binomial)
Characteristic log(OR)1 95% CI1 p-value
(Intercept) 22 18, 26 <0.001
Date -0.10 -0.12, -0.08 <0.001
Sex


    F
    M -0.03 -0.80, 0.75 >0.9
1 OR = Odds Ratio, CI = Confidence Interval

Within-individual moult dynamics across migratory status

# A tibble: 2 × 2
  migratory_status `n_distinct(rings_comb)`
  <chr>                               <int>
1 M                                       5
2 R                                      16
Code
# mixed effects binomial model comparing migratory status and date effect on the changes in moult scores
mod_moult_status_bird_RIS <- 
  lme4::glmer(prop_molt_score_max ~ 
                date_J + migratory_status +
         (date_J|ring_season),
       data = ind_prop_molt_scores_status, 
       family = binomial)
Characteristic log(OR)1 95% CI1 p-value
(Intercept) 31 17, 44 <0.001
Date -0.14 -0.20, -0.08 <0.001
Migratory status


    M
    R -0.71 -2.7, 1.2 0.5
1 OR = Odds Ratio, CI = Confidence Interval

Within-individual moult dynamics across ages

# A tibble: 6 × 2
    age `n_distinct(rings_comb)`
  <dbl>                    <int>
1     1                        6
2     2                        4
3     3                       12
4     4                       11
5     5                        4
6     6                        2
Code
# mixed effects binomial model comparing migratory status and date effect on the changes in moult scores
mod_moult_age_bird_RIS <- 
  lme4::glmer(prop_molt_score_max ~ 
                date_J + age +
         (date_J | ring_season),
       data = ind_prop_molt_scores_age, 
       family = binomial)
Characteristic log(OR)1 95% CI1 p-value
(Intercept) 53 18, 88 0.003
Date -0.28 -0.47, -0.10 0.003
Age 2.2 0.61, 3.7 0.006
1 OR = Odds Ratio, CI = Confidence Interval

inspect the random slopes against the raw data from photos

Breeding status analysis

Relationships between breeding schedule and plumage

effect of breeding plumage score on prolonged breeding

do individuals with a fuller breeding plumage (for their sex) breed later than the rest of the population? No effect

Code
mod_max_score_last_breeding_date <- 
  lme4::lmer(last_breeding_date_J_snum ~ 
                 std_max_breeding_score + 
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_max_score_last_breeding_date, intercept = TRUE)
Characteristic Beta 95% CI1
(Intercept) 10 5.8, 15
std_max_breeding_score -1.5 -5.9, 2.9
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_max_score_last_breeding_date))$std_max_breeding_score,
            aes(x = std_max_breeding_score, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_max_score_last_breeding_date))$std_max_breeding_score,
              aes(x = std_max_breeding_score, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = std_max_breeding_score, y = last_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  ylab("year-scaled date of last breeding attempt") +
  xlab("sex-scaled max. breeding plumage score")

effect of breeding plumage score on early breeding

do individuals with a fuller breeding plumage (for their sex) breed earlier than the rest of the population? No effect

Code
mod_max_score_first_breeding_date <- 
  lme4::lmer(first_breeding_date_J_snum ~ 
                 std_max_breeding_score +
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_first_breeding_date)

tbl_regression(mod_max_score_first_breeding_date, intercept = TRUE)
Characteristic Beta 95% CI1
(Intercept) 0.66 -4.7, 6.0
std_max_breeding_score -2.9 -7.8, 1.9
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_max_score_first_breeding_date))$std_max_breeding_score,
            aes(x = std_max_breeding_score, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_max_score_first_breeding_date))$std_max_breeding_score,
              aes(x = std_max_breeding_score, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_first_breeding_date,
              aes(x = std_max_breeding_score, y = first_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  ylab("year-scaled date of first breeding attempt") +
  xlab("sex-scaled max. breeding plumage score")

effect of prolonged breeding on breeding plumage score

do individuals with a late breeding attempts tend to have a fuller breeding plumage? No effect

Code
mod_last_breeding_date_max_score <- 
  lme4::lmer(std_max_breeding_score ~ 
                 last_breeding_date_J_snum +
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_last_breeding_date_max_score, intercept = TRUE)
Characteristic Beta 95% CI1
(Intercept) 0.00 -0.24, 0.25
last_breeding_date_J_snum 0.00 -0.01, 0.00
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_last_breeding_date_max_score))$last_breeding_date_J_snum,
            aes(x = last_breeding_date_J_snum, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_last_breeding_date_max_score))$last_breeding_date_J_snum,
              aes(x = last_breeding_date_J_snum, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = last_breeding_date_J_snum, y = std_max_breeding_score),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("year-scaled date of last breeding attempt") +
  ylab("sex-scaled max. breeding plumage score")

Relationships between breeding schedule and moult

effect of prolonged breeding on moult

do individuals with late breeding attempts have a delayed moult? No effect

Code
mod_last_breeding_date_prop_molt_mid <- 
  lmer(mid_point_date_J ~ last_breeding_date_J_snum + 
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_last_breeding_date_prop_molt_mid, intercept = TRUE)
Characteristic Beta 95% CI1
(Intercept) 168 157, 179
last_breeding_date_J_snum 0.14 -0.07, 0.36
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_mid))$last_breeding_date_J_snum,
            aes(x = last_breeding_date_J_snum, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_mid))$last_breeding_date_J_snum,
              aes(x = last_breeding_date_J_snum, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = last_breeding_date_J_snum, y = mid_point_date_J),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("year-scaled date of last breeding attempt") +
  ylab("mid-point date between\nlast max score photo and first photo during moult")

effect of prolonged breeding on prolonged retention of full plumage

do individuals with late breeding attempts retain their full breeding plumage longer? There is a positive relationship between the date when an individual was last seen with its maximum breeding plumage and the date when it was last observed breeding.

Code
mod_last_breeding_date_prop_molt_latest <- 
  lmer(latest_max_date_J ~ last_breeding_date_J_snum + 
        (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_last_breeding_date_prop_molt_latest, intercept = TRUE)
Characteristic Beta 95% CI1
(Intercept) 156 141, 172
last_breeding_date_J_snum 0.37 0.17, 0.56
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_latest))$last_breeding_date_J_snum,
            aes(x = last_breeding_date_J_snum, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_latest))$last_breeding_date_J_snum,
              aes(x = last_breeding_date_J_snum, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = last_breeding_date_J_snum, y = latest_max_date_J),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("year-scaled date of last breeding attempt") +
  ylab("last date photographed with max score")

Relationships between age and breeding phenology

effect of age on prolonged breeding

do older individuals conclude their breeding season later? No

Code
mod_age_last_breeding_date <- 
  lme4::lmer(last_breeding_date_J_snum ~ age +
        (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_age_last_breeding_date, intercept = TRUE, 
               label = list(age ~ "Age"))
Characteristic Beta 95% CI1
(Intercept) 13 -17, 43
Age -0.83 -9.0, 7.4
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_age_last_breeding_date))$age,
            aes(x = age, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_age_last_breeding_date))$age,
              aes(x = age, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = age, y = last_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("age") +
  ylab("year-scaled date of last breeding attempt")

effect of age on early breeding

do older individuals start breeding earlier? No

Code
mod_age_first_breeding_date <- 
  lme4::lmer(first_breeding_date_J_snum ~ age +
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_first_breeding_date)

tbl_regression(mod_age_first_breeding_date, intercept = TRUE, 
               label = list(age ~ "Age"))
Characteristic Beta 95% CI1
(Intercept) -4.8 -35, 25
Age 2.3 -5.7, 10
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_age_first_breeding_date))$age,
            aes(x = age, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_age_first_breeding_date))$age,
              aes(x = age, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_first_breeding_date,
              aes(x = age, y = first_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("age") +
  ylab("year-scaled date of first breeding attempt")

Meeting notes:

13-Nov-24: Bart, Luke, and Bashar via zoom

  • add the breeding data to the analysis: for each individual include the date of last breeding (i.e., last date seen with nest or brood) as a predictor of molt timing. Also do an analysis relating the timing of last breeding to the age of the individual. Bashar will send Luke the breeding data he received from Ted.

  • drop pre-October data from the molt timing analysis.

  • next steps: Bashar to eventually write up this study as a report (which could eventually be used as his MSc thesis if he wants). Priority will be on him writing up a proposal for his thesis (which has a concrete deadline and is graded). Bashar will present the study at our weekly Monday meeting in the first few months of 2025.

References

Kok, Eva MA, Jerry A Hogan, and Theunis Piersma. 2020. “Experimental Tests of a Seasonally Changing Visual Preference for Habitat in a Long-Distance Migratory Shorebird.” Ethology 126 (7): 681–93.